import plugin from '../../../lib/plugins/plugin.js'
import { segment } from "oicq";

//游戏规则：房主发起轮盘赌,等待赌徒加入游戏,人数两人以上,房主开始轮盘赌，从一号赌徒开始(房主)轮流开枪，每次中弹的概率是六分之一，中弹的抬走下一位，活到最后的赌徒则胜利。

//特别鸣谢:感谢Pluto为冰祈提供的娱乐玩法！

let game = {}  //游戏房间


export class Roulette extends plugin {
  constructor () {
    super({
      /** 功能名称 */
      name: '轮盘赌',
      /** 功能描述 */
      dsc: '简单开发示例',
      /** https://oicqjs.github.io/oicq/#events */
      event: 'message',
      /** 优先级，数字越小等级越高 */
      priority: 5000,
      rule: [
        {
          /** 命令正则匹配 */
          reg: '^审判$',
          /** 执行方法 */
          fnc: 'elslpd'
        },
        {
          /** 命令正则匹配 */
          reg: '^(参与|加入)审判$',
          /** 执行方法 */
          fnc: 'joingame'
        },
        {
          /** 命令正则匹配 */
          reg: '^审判开始$',
          /** 执行方法 */
          fnc: 'start'
        },
        {
          /** 命令正则匹配 */
          reg: '^结束审判$',
          /** 执行方法 */
          fnc: 'EndCheck'
        },
        {
          /** 命令正则匹配 */
          reg: '^(审判|审判开始)$',
          /** 执行方法 */
          fnc: 'kaiqiang'
        },
        {
          /** 命令正则匹配 */
          reg: '^踢出审判$',
          /** 执行方法 */
          fnc: 'getout'
        }
      ]
    })
  }

  async  elslpd(e) {
 
   
     let guessConfig = getGuessConfig(e)
  if (guessConfig.gameing ) {
    
   
      if(guessConfig.current){
  
      e.reply(`昼夜时空皆为虚像，命运的纽带却再次将你带到了我的永恒长夜中。`)
      return true;
    }
    
    e.reply('应命运的召唤降临在此间——哎?你也是，异世界的旅人吗…?那好吧，本皇女恩许你同行。')
    return true;
  }
  
  
  e.reply(`皇女应断之罪为何，那当然是「违逆命运」了…毕竟，正是命运，让你…是命运，令你我降临此世，将因果交织相连。我、我会守护你，只、只因这是命运的默示录中昭告之事!`)
  game[e.group_id] = {};
  game[e.group_id].wj = [e.user_id];
  game[e.group_id].i = 0
  game[e.group_id].j = 0
  guessConfig.gameing = true;
 
 console.log(game)
   return true;
}


 async  joingame(e) {
    
  let guessConfig = getGuessConfig(e)
  if (guessConfig.gameing ) {
  if(guessConfig.current){
      e.reply(`哼哼，为应受罪罚之徒断罪，为命运青睐之人祝圣，以无尽的幽夜净土收容世间一切不被容赦的梦想，这就是「断罪皇女」血脉背负的沉重使命，谁人也不许质疑。`)
      return true;
  }
  if(game[e.group_id].wj.indexOf(e.user_id) == -1){
   
      
  game[e.group_id].wj[game[e.group_id].wj.length] = e.user_id
  
  e.reply(`奥兹，我之忠友啊…能遇到「那个人」，与本皇女同样不属于这个世界的旅人…连残酷的命运，也会对我罪孽深重的血脉，展露微笑呢。就算是我的命运，我无法逃离的「现实」，如此同行之人已有${game[e.group_id].wj.length}`);
  console.log(game)
  return true;
}else{
    e.reply(`看你有什么烦恼的样子…?旅人啊，不必困惑。`)
    return true;
}
  
}
 e.reply(`审判将启，罪人尚未归位`);
  return true;
}


 async  start(e) {
    
  let guessConfig = getGuessConfig(e)
  let kqsx = Math.round(Math.random() * (game[e.group_id].wj.length - 1) )
  console.log(kqsx)
  if (guessConfig.gameing ) {
      
      if(guessConfig.current){
      e.reply(`哼哼，为应受罪罚之徒断罪，为命运青睐之人祝圣，以无尽的幽夜净土收容世间一切不被容赦的梦想，这就是「断罪皇女」血脉背负的沉重使命，谁人也不许质疑。`)
      return true;
  }
      
      
      if(game[e.group_id].wj[0] == e.user_id){
          if(game[e.group_id].wj.length < 2){
              e.reply(`审判将启，罪人尚未归位`)
              return true;
          }
          
          
   
   e.reply(`以我的左眼，这只透彻因果之丝的「断罪之眼」，洞察你的命运，罪人已至${game[e.group_id].wj.length}人,裁断此世一切罪责，透彻此间一切真知。`)
   guessConfig.current = true;
   
   guessConfig.timer = setTimeout(() => {
      if (guessConfig.gameing && guessConfig.current) {
        
        e.reply(`检测到群友网络波动，游戏结束`);
        guessConfig.gameing = false;
        guessConfig.current = false;
        delete game[e.group_id]
     
		return true;
      }
    }, 300000)//毫秒数
   
   
   
   game[e.group_id].i = kqsx
   
   
   setTimeout(() => {
    let mag = [
      '以皇女之名，以你的祝圣之翼，遮蔽日月星空，带来永恒的幽夜吧。审判开始吧！,',
      '审判开始！',
      segment.at(game[e.group_id].wj[kqsx]),
      ' 审判'
    ]
             e.reply(mag)
              return true;
             },2000);
   
      }else{
          e.reply(`我听见命运的嚅嗫，低声呼唤我之尊名…`)
          return true;
      }
      
      return true;
    }
 e.reply(``);
   return true; //返回true 阻挡消息不再往下
}

 async EndCheck(e) {
    let guessConfig = getGuessConfig(e);
    let {gameing, current } = guessConfig;
    
  if (guessConfig.gameing ) {
     e.reply(`审判将息`) 
  
     init(e)
  
     return true;

}
 e.reply(`菲谢尔：哼哼，这可是好光景。就像在「那个世界」，罪人的血与泪在「断罪之皇女」面前凝结的模样呢——啊、啊——哈嚏!哈嚏!`);
    return true;
}


 async  kaiqiang(e) {
   
    let guessConfig = getGuessConfig(e);
    let num = Math.ceil(Math.random() * 5); //开枪中弹概率
    let index = game[e.group_id].wj.indexOf(e.user_id);
    let indexs = Math.round(Math.random() * (game[e.group_id].wj.length -1) );
    console.log(num)
    
  if (guessConfig.gameing  ) {
      
     if(guessConfig.current && game[e.group_id].wj.indexOf(e.user_id) != -1){
         
         
         if(game[e.group_id].wj[game[e.group_id].i] == e.user_id){
             
             
         
        if(num == 2 || game[e.group_id].j== 5){
            
            if(game[e.group_id].j == 5){
                    e.reply([segment.at(game[e.group_id].wj[indexs]),`枪响了，你死了！`]);
                     e.group.muteMember(game[e.group_id].wj[indexs],60); //禁言
                    game[e.group_id].wj.splice(indexs,1);
                  
                    
                    if(game[e.group_id].wj.length == 1){
               	   
                 e.reply([segment.at(game[e.group_id].wj),`\n恭喜你在这轮盘赌中活了下来`]);
                 
                 init(e)
                 
                 return true;
        
         }else{
             
             
             if(game[e.group_id].i < indexs){
              game[e.group_id].i++;  
             }
             
             if(game[e.group_id].i == game[e.group_id].wj.length){
                  game[e.group_id].i =0;
               }
             
              game[e.group_id].j = 0;
              
         setTimeout(() => {
              e.reply([segment.at(game[e.group_id].wj[game[e.group_id].i]),`\n请开枪`]);
             },2000);
         }
         return true;
                    
             
         }
                    
           
            e.reply("啊啊，看那昭告命运的圣裁之雷…")
              e.group.muteMember(e.user_id,60);  //中弹后,机器人是管理员就禁言一分钟
               
              game[e.group_id].wj.splice(index,1);

               
               
           if(game[e.group_id].wj.length == 1){
               
             e.reply([segment.at(game[e.group_id].wj),`\n皇女应断之罪为何，那当然是「违逆命运」了…毕竟，正是命运，让你…是命运，令你我降临此世，将因果交织相连。我、我会守护你，只、只因这是命运的默示录中昭告之事!`]);
             init(e)
             return true;
        
         }else{
            
            
            
            if(game[e.group_id].i ==game[e.group_id].wj.length){
                   game[e.group_id].i =0;
               }

           
           game[e.group_id].j = 0;
         setTimeout(() => {
              e.reply([segment.at(game[e.group_id].wj[game[e.group_id].i]),`\n请开枪`]);
             },2000);
         }
         return true;
        }
         else{
             
             game[e.group_id].i++;
             game[e.group_id].j++;
             
             e.reply(`天晴了吗，真舒…咳，此间须臾的霁月光风，就如命运的转折点一般呢!愉快!\n审判次数:`+game[e.group_id].j+`\n审判次数为5时，下一轮审判必将有罪人伏诛`);
             
             if(game[e.group_id].i == game[e.group_id].wj.length){
                 game[e.group_id].i = 0;
             }
             
             setTimeout(() => {
              e.reply([segment.at(game[e.group_id].wj[game[e.group_id].i]),`\n请开枪`]);
             },2000);
             
            return true;
         }
         
         }else{
             e.reply(`还未至你审判之时`)
             return true;
         }
         
     }else{
         e.reply(`审判尚未开始或你已伏诛，请静心等待结果`)
         return true;
     }
    
   
}
 e.reply(`哼哼，为应受罪罚之徒断罪，为命运青睐之人祝圣，以无尽的幽夜净土收容世间一切不被容赦的梦想，这就是「断罪皇女」血脉背负的沉重使命，谁人也不许质疑。`);
  return true;
}


 async  getout(e) {
    
  let guessConfig = getGuessConfig(e)
  let  qq;
  let indexs
  
  if (e.message[0].type == 'at') {
      qq = e.message[0].qq
     
    }else if(e.message[1].type =='at' ){
        qq = e.message[1].qq;
        
    }
    
  
  indexs = game[e.group_id].wj.indexOf(qq)
  
  if (guessConfig.gameing && guessConfig.current) {
  if(game[e.group_id].wj.indexOf(e.user_id) != -1){
        
       if(indexs == -1){
         e.reply(`不知在遥远彼方的扈从…`,true)
         return true
     }
      
      game[e.group_id].wj.splice(indexs,1)
      
      e.reply(`成功踢出审判，目前还有${game[e.group_id].wj.length}人`,true)
       
       if(game[e.group_id].wj.length == 1){
          
             e.reply([segment.at(game[e.group_id].wj),`\n恭喜你在这轮盘赌中活了下来`]);
             init(e)
             return true;
        
       }else{
           
           if(game[e.group_id].i == game[e.group_id].wj.length){
                game[e.group_id].i = 0;
             }
             
             setTimeout(() => {
              e.reply([segment.at(game[e.group_id].wj[game[e.group_id].i]),`\n请开枪`]);
             },2000);
           
             return true;
           
       }
       
  }
   e.reply(`与审判无关之人`,true)
   return true;
  
}
e.reply("审判未启，戒骄戒躁")
  return true;
}
}

const guessConfigMap = new Map()

function getGuessConfig(e) {
    let key = e.message_type + e[e.isGroup ? 'group_id' : 'user_id'];
    let config = guessConfigMap.get(key);
    if (config == null) {
      config = {
        gameing: false,
        current: false,
        timer: null,
      }
      guessConfigMap.set(key, config);
    }
    return config;
  }
  
function init(e){
   let guessConfig = getGuessConfig(e) 
   guessConfig.gameing = false;
   guessConfig.current = false;
   clearTimeout(guessConfig.timer);
    delete game[e.group_id]
   
}
